home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Aminet / misc / emu / prlink_080b.lha / prlink-0.8.0b / README < prev    next >
Text File  |  1995-06-07  |  14KB  |  318 lines

  1. prlink v0.8.0 -- a data transfer system for Commodore 8-bit computers
  2.                  and a 386 clone running Linux
  3.  
  4. Release date: 10th May, 1995
  5. Copyright © 1994, 1995 Marko Mäkelä and Olaf Seibert
  6. Original Linux and Commodore 64/128/Vic-20 version by Marko Mäkelä
  7. Ported to the PET and the Amiga series by Olaf Seibert
  8.  
  9.     This program is free software; you can redistribute it and/or modify
  10.     it under the terms of the GNU General Public License as published by
  11.     the Free Software Foundation; either version 2 of the License, or
  12.     (at your option) any later version.
  13.  
  14.     This program is distributed in the hope that it will be useful,
  15.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.     GNU General Public License for more details.
  18.  
  19.     You should have received a copy of the GNU General Public License
  20.     along with this program; if not, write to the Free Software
  21.     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  22.  
  23.  
  24. PREFACE
  25.  
  26. This document describes the first public release of our prlink utility,
  27. a program package that lets you to copy memory blocks to and from the
  28. memory of a Commodore 8-bit computer.  The document is very clumsy right
  29. now, so feel free to write a better version and send it to us if you like
  30. this program. :-)
  31.  
  32. Currently daemons are available for the Commodore PET series, the Vic-20,
  33. C64 and C128 computers, and there are compilation options that support the
  34. Commodore REU, even simultaneously with an Action Replay cartridge installed,
  35. and some internal memory expansions on the C64 and the C128.
  36.  
  37. The client programs are written so that they should compile on MS-DOS
  38. fairly easily.  The programs are written for Linux, and there are machine
  39. language versions of the transfer routines for i386 compatible processors.
  40. The software also compiles on the Amiga, and the Amiga transfer routines
  41. are written in 68000 machine language.
  42.  
  43. The idea of the transfer utility package is that a daemon runs on the
  44. Commodore side in an interrupt routine, without blocking the computer.
  45. It checks if the PC wants to send any command, and executes possible
  46. commands.  There are commands for loading and saving memory blocks, for
  47. jumping to a machine language program and for starting a BASIC program.
  48. The latter two commands deinstall the daemon for maximum compatibility.
  49.  
  50. With the current protocol, it is be possible to make useful
  51. applications that run on the PC, like a disk copier (with ZipCode
  52. compression and decompression if desired), and a machine language monitor.
  53. It is already possible to develop Commodore programs on the PC, and to
  54. transfer them over to be tested out.  Actually, this is exactly how the
  55. prserver.asm and prsample.asm programs have been developed.  I use my
  56. the dasm assembler, ported to ANSI C by Olaf Seibert, which supports
  57. conditional assembling and multiple source modules.  It can be retrieved
  58. from ftp.funet.fi, as /pub/cbm/programming/dasm.tar.gz.
  59.  
  60.  
  61. PROGRAMS
  62.  
  63. Following client programs are available:
  64.  
  65.   basic loader: This is a BASIC listing that you can type in on your C=
  66.                 computer in order to bootstrap the prlink utilities.  You
  67.                 will only need this one if you don't have any other
  68.                 possibility to transfer the prserver program to your C=
  69.                 computer.
  70.  
  71.   prload:   Loads a Commodore-style program file to the remote computer.
  72.  
  73.   prsave:   Echoes the contents of a C= memory area to standard output.
  74.  
  75.   prcart:   Loads and starts Vic-20 cartridges.  Takes its input either
  76.             from the standard input, or from files that contain the 8kB
  77.             ROM images for $A000-$BFFF and $6000-$7FFF.  Patches the
  78.             Autostart code so that RESET will work, and start the transfer
  79.             daemon again.
  80.  
  81.   prsample: Plays a 8-bit sample file on the remote computer, cutting
  82.             the four least significant bits off.  Does not try to handle
  83.             the sampling frequency, so it's useful only for testing the
  84.             link.
  85.  
  86.   prrfile: Reads a file from C= disk to local disk.
  87.   prwfile: Writes a file from local disk to C= disk.
  88.   prdisk: Reads or writes whole C= disks to/from local files.  All sizes
  89.           of drives are supported.  The only requirement is that the
  90.           first track is 1 and the first sector on each track is 0.  Tracks
  91.           and sectors increment up to 999.
  92.  
  93. You can find the command usage out by using the -h switch in each program.
  94.  
  95. The prload and prsave commands have a -b switch that specifies the memory
  96. bank.  Bank numbers 0 to f are for internal memory.  The two lowmost bits
  97. are for specifying the MMU mapped memory bank on a C128.  In other words,
  98. MMU mapped memory banks on the C128 are numbered from 0 to 3.  On
  99. unexpanded C128s, the banks 2 and 3 are the same than banks 0 and 1.
  100.  
  101. The bits 2 and 3 of the bank number specify the PIA mapped expanded memory
  102. bank on a C128 or a C64.  So, the 64kB banks of a C128 with 1 megabyte of
  103. internal memory are numbered from 0 to f.  On a 512kB-expanded C128, the
  104. unique bank numbers are 0-1, 4-5, 8-9 and c-d, as there are only two MMU
  105. banks.  For instance, the banks b and 9 are the same.  On a 256kB-expanded
  106. C64, the bank numbers 0-3, 4-7, 8-b and c-f are the same, so there are 4
  107. different banks.
  108.  
  109. Bank numbers from 10 to ff are for REU memory banks, i.e. the banks of a
  110. 512 kilobyte REU are numbered from 10 to 17.
  111.  
  112. As you can see from the prserver.asm source code, the PIA and REU expansions
  113. are accessed through a 16kB window at $4000.  There's a bug in the plain
  114. C128 version: any data read from $0-$400 will be fetched from bank 0.  The
  115. version for the PIA expansion does not have this bug.
  116.  
  117.  
  118. COMPILING
  119.  
  120. To compile, you need GNU C (tested with 2.5.8 and 2.6.2, any version
  121. should do) and the dasm port made by Olaf Seibert.  It can be downloaded
  122. from ftp.funet.fi:/pub/cbm/programming/dasm.tar.gz.
  123.  
  124. The software supports several different cables.  The transfer routines for
  125. the different cables are in prtrans2.c, prtrans4.c, prtrans8.c and pramiga.c.
  126. You will have to edit the Makefile to specify which cable (CABLEOBJ) and
  127. default printer port to use.  The latter one is not required in the
  128. Amiga version.  The Amiga version also allows the -DPRLINK88 option, which
  129. uses a full 8-bit transfer.
  130.  
  131. Also, before compiling the prserver.prg daemon for the remote
  132. computer, you have to edit the TARGET, RAMEXP and CABLE definitions in the
  133. Makefile.  The definitions are as follows:
  134.  
  135.     definition    options
  136.     ----------    -------
  137.     TARGET        target system, i.e. vic20, c64, c128 etc.
  138.  
  139.     RAMEXP        none    no memory expansion installed
  140.             piaexp    the PIA expansion for the C64 and the C128
  141.                 (ftp.funet.fi:/pub/cbm/documents/{256kB,1028})
  142.             reuexp    Commodore RAM Expansion Unit
  143.             pet96    PET 8096/8296 expansion
  144.  
  145.     CABLE        prlink     the default 8-bit/4-bit cable
  146.             pc64     the 4-bit/4-bit cable used by the PC64 emulator
  147.             c64net     the 4-bit/2-bit cable used by 64NET
  148.             prlink88 fully 8-bit transfers with the pramiga cable
  149.  
  150. Also, you may need to change the following definitions in prserver.asm, if
  151. using the PIA and/or REU expansions:
  152.  
  153.     pia        the PIA base address, e.g. $dff0
  154.     reu        the REU base address, e.g. $df00
  155.     actionreuplay    If you are using Action Replay and the REU
  156.             simultaneously, set this to 1.
  157.  
  158.  
  159. If you have several C= computers connected to different printer ports,
  160. probably even using different cables, you have to compile several versions
  161. of the programs for your configuration.  By default, all prlink client
  162. programs are combined to one file, prmain, which will recognize the program
  163. name and act accordingly.  If the program is called with prload, it will
  164. work as prload.  Alternatively, you can use command line switches, like
  165. prmain --prload, to change the operation.  I have compiled two different
  166. client program packages, prmain8 for the prlink cable, and prmain4 for the
  167. PC64 cable.  In my .cshrc, I have defined aliases like
  168.  
  169. alias prload4 'prmain4 --prload'
  170. alias prsave4 'prmain4 --prsave'
  171. alias prcart4 'prmain4 --prcart'
  172. alias prrfile4 'prmain4 --prrfile'
  173. alias prwfile4 'prmain4 --prwfile'
  174. alias prdisk4 'prmain4 --prdisk -l ~/bin/prdisk.prg'
  175.  
  176. Actually, I should have several versions of these prdisk.prg, prrfile.prg
  177. and prwfile.prg programs, one for each computer type.  Then I should have
  178. aliases like prdisk4c128, prdisk8vic and so on.  If you have a better idea
  179. how the prdisk, prwfile and prrfile clients should be implemented, feel free
  180. to tell me.
  181.  
  182.  
  183. PERFORMANCE OVERVIEW
  184.  
  185. The 64NET cable is supported only because of compatibility reasons, as it
  186. is very slow.  Instead, you should use either the PC64 cable or my own
  187. cable.  Here are some statistics:
  188.  
  189. Client: 486DX2/66 with 128kB cache running Linux, no processes running on
  190.         the background
  191. Server: Commodore 128D with 1 MB internal memory and 1 MB REU
  192. Data block: 64 kilobytes
  193. Cable: PC64
  194.  
  195. Server type                send    receive
  196. ===========                ====    =======
  197. Commodore 128 with PIA mapped memory    3,83s    4,09s
  198. Commodore 128 with REU, using REU    4,06s    4,34s
  199. Commodore 128 (stock)            4,98s    5,55s
  200. Commodore 64 with PIA mapped memory    7,25s    7,72s
  201. Commodore 64 with REU, using REU    7,55s    8,07s
  202. Commodore 64 (stock)            8,07s    8,01s
  203.  
  204. Note that the Commodore 64 version of the server tries to use the 2 MHz
  205. mode of the Commodore 128.  Thus, on a Commodore 128 running in C64 mode,
  206. the transfer times are about half of the rates listed above.
  207.  
  208.  
  209. HARDWARE
  210.  
  211. The PC64 cable is the cable used by the Personal C64 emulator written and
  212. marketed in Germany by Wolfgang Lorenz <100112.220@compuserve.com>, and
  213. has 4 data bits to both directions.  If you are using or are planning to use
  214. this emulator, then you are best off using this cable.
  215.  
  216. The prlink cable supports 8 bit data transfers from the PC to the C= side,
  217. and 4 bits from the C= to the PC.  It uses four bidirectional lines on the
  218. PC.
  219.  
  220. And now for the cable pinouts.  Note that I disclaim any warranties, so
  221. you are using these instructions at your own risk.  Do not insert the plug
  222. to the user port the wrong way around, or you'll blow your printer port on
  223. the PC with the 9 volt signal as I did.
  224.  
  225. The 64NET cable pinout won't be listed, as the 64NET documentation claims
  226. that it is copyrighted.  Besides, including it would be a waste of space,
  227. as other cables allow much faster protocols.  Here's the PC64 cable pinout:
  228.  
  229.              PC                C64        Comment
  230.  
  231.          GND    25   ------   A  GND      Ground
  232.          D7      9   ------>  B  FLAG     Handshake signal
  233.          ERR    15  <------   C  PB0      Data from C= to PC
  234.          SEL    13  <------   D  PB1               "
  235.          PE     12  <------   E  PB2               "
  236.          ACK    10  <------   F  PB3               "
  237.          D0      2   ------>  H  PB4      Data from PC to C=
  238.          D1      3   ------>  J  PB5               "
  239.          D2      4   ------>  K  PB6               "
  240.          D3      5   ------>  L  PB7               "
  241.          BUSY   11  <------   M  PA2      Handshake signal
  242.  
  243. My prlink cable is constructed as follows:
  244.  
  245.              PC                C64        Comment
  246.  
  247.          GND    25   ------   A  GND      Ground
  248.          D3      5   ------>  B  FLAG     Handshake signal
  249.          STROBE  1  <------>  C  PB0      Bidirectional data lines
  250.          AUTO   14  <------>  D  PB1               "
  251.          INIT   16  <------>  E  PB2               "
  252.          SELECT 17  <------>  F  PB3               "
  253.          D4      6   ------>  H  PB4      Data from PC to C=
  254.          D5      7   ------>  J  PB5               "
  255.          D6      8   ------>  K  PB6               "
  256.          D7      9   ------>  L  PB7               "
  257.          BUSY   11  <------   M  PA2      Handshake signal
  258.  
  259. Here is the pramiga cable, the only alternative for Amiga:
  260.  
  261.            Amiga               PET        Comment
  262.  
  263.          GND    22   ------   A  GND      Ground
  264.          POUT   12   ------>  B  CA1      Handshake signal (strobe/flag)
  265.          D0      2  <------>  C  PA0      Bidirectional data lines
  266.          D1      3  <------>  D  PA1               "
  267.          D2      4  <------>  E  PA2               "
  268.          D3      5  <------>  F  PA3               "
  269.          D4      6   ------>  H  PA4      Data from Amiga to PET
  270.          D5      7   ------>  J  PA5               "
  271.          D6      8   ------>  K  PA6               "
  272.          D7      9   ------>  L  PA7               "
  273.          BUSY   11  <------   M  CB2      Handshake signal (ack)
  274.  
  275.  
  276. On the PET, I chose to use CB2 even though that pin is normally
  277. connected to a speaker. I did this because it makes the cable identical
  278. to the 64 and VIC cable, and allows you to use a single-sided connector.
  279. Make sure though that it does not connect the top and bottom fingers!
  280.  
  281. Note that the lower user port connections are named ABCDEFHJKMMN,
  282. skipping G and I.
  283.  
  284. On the Amiga 1000, pin 25 is not GND so I picked 22 instead which should
  285. be GND on all Amiga models.  On the PC, all pins from 18 to 25 should be
  286. GND.
  287.  
  288. The Amiga cable allows for two protocols: the prlink compatible 4-bit/8-bit
  289. transfer, and a full 8-bit transfer, the option prlink88.
  290.  
  291. BOOTSTRAPPING
  292.  
  293. Type in the supplied "basic-listing", with proper modifications for your
  294. hardware. Then run it, an on the Linux/Amiga side give the command "prload
  295. prserver.prg". Now you should see a list of addresses and byte values
  296. scroll by. If not, the connection does not work properly. These bytes are
  297. not put in memory yet; for that you must make one final change as indicated
  298. at the end of "basic-listing".
  299.  
  300. Once prserver.prg has been transferred, save it. The addresses it occupies
  301. are printed by the basic program.
  302.  
  303. USING
  304.  
  305. Start the 6502 side by giving the command SYS [start address], where
  306. [start address] is of course the first byte of the program. The server
  307. will hook itself in the IRQ and you should get a READY prompt back
  308. immediately. Now you can use the prload, prsave, etc programs from
  309. the other side. These programs give their usage if you call them with
  310. incorrect arguments (or no arguments at all).
  311.  
  312.  
  313. CONTACTING THE AUTHORS
  314.  
  315. If you have any questions, e-mail me, Marko Mäkelä <Marko.Makela@HUT.FI>.
  316. Questions related to the Amiga and PET versions should be directed to
  317. Olaf Seibert <rhialto@mbfys.kun.nl>.
  318.